#pragma once

typedef enum {
	SURFTYPE_UNDEFINED,
	SURFTYPE_GRASS,
	SURFTYPE_MOSS,
	SURFTYPE_ROCK,
	SURFTYPE_GRAVEL,
	SURFTYPE_DIRT,
	SURFTYPE_MUD,
	SURFTYPE_SAND,
	SURFTYPE_SNOW,
	SURFTYPE_ICE,
	SURFTYPE_LIQUID,
	SURFTYPE_FLESH,
	SURFTYPE_ARMOR,
	SURFTYPE_METAL,
	SURFTYPE_CONCRETE,
	SURFTYPE_BRICK,
	SURFTYPE_PLASTER,
	SURFTYPE_CLAY,
	SURFTYPE_MARBLE,
	SURFTYPE_CERAMIC,
	SURFTYPE_ASPHALT,
	SURFTYPE_WOOD,
	SURFTYPE_GLASS,
	SURFTYPE_BPGLASS,
	SURFTYPE_PLASTIC,
	SURFTYPE_RUBBER,
	SURFTYPE_FOAM,
	SURFTYPE_CARDBOARD,
	SURFTYPE_CARPET,
	SURFTYPE_CLOTH,
	SURFTYPE_ELECTRONIC,
	SURFTYPE_FORCEFIELD
} surfType_t;

typedef enum {
	SURFTYPE_BIT0				= BIT(0),
	SURFTYPE_BIT1				= BIT(1),
	SURFTYPE_BIT2				= BIT(2),
	SURFTYPE_BIT3				= BIT(3),
	SURFTYPE_BIT4				= BIT(4),
	SURFTYPE_MASK				= BIT(5) - 1,

	SURFACE_HINT				= BIT(5),	// Make a primary BSP splitter
	SURFACE_DISCRETE			= BIT(6),	// Don't clip or merge this surface
	SURFACE_PORTALSKY			= BIT(7),	// This surface needs a portal sky render
	SURFACE_SLICK				= BIT(8),	// Entities should slide along this surface
	SURFACE_BOUNCE				= BIT(9),	// Entities should bounce off this surface
	SURFACE_LADDER				= BIT(10),	// Players can climb up this surface
	SURFACE_NODAMAGE			= BIT(11),	// Never give falling damage
	SURFACE_NOIMPACT			= BIT(12),	// Don't make impact effects
	SURFACE_NOSTEPS				= BIT(13),	// Don't play footstep sounds
	SURFACE_NOCLIP				= BIT(14),	// Don't generate a clip-surface at all
	SURFACE_NODRAW				= BIT(15),	// Don't generate a draw-surface at all
	SURFACE_NOTJUNC				= BIT(16)	// Don't use this surface for T-Junction fixing
} surfaceFlags_t;

typedef enum {
	CONTENT_SOLID				= BIT(0),	// An eye is never valid in a solid
	CONTENT_OPAQUE				= BIT(1),	// Blocks visibility
	CONTENT_TRANSLUCENT			= BIT(2),	// Don't eat contained surfaces
	CONTENT_WATER				= BIT(3),	// Used for water
	CONTENT_SLIME				= BIT(4),	// Used for slime
	CONTENT_LAVA				= BIT(5),	// Used for lava
	CONTENT_PLAYERCLIP			= BIT(6),	// Solid to players
	CONTENT_VEHICLECLIP			= BIT(7),	// Solid to vehicles
	CONTENT_MOVEABLECLIP		= BIT(8),	// Solid to moveables
	CONTENT_MISSILECLIP			= BIT(9),	// Solid to missiles
	CONTENT_BODY				= BIT(10),	// Used for players (only in game)
	CONTENT_CORPSE				= BIT(11),	// Used for dead bodies (only in game)
	CONTENT_ITEM				= BIT(12),	// Used for items (only in game)
	CONTENT_PROJECTILE			= BIT(13),	// Used for projectiles (only in game)
	CONTENT_TRIGGER				= BIT(14),	// Used for triggers (only in game)
	CONTENT_DETAIL				= BIT(15),	// Brushes not used for the BSP
	CONTENT_STRUCTURAL			= BIT(16),	// Brushes used for the BSP
	CONTENT_AREAPORTAL			= BIT(17),	// Portal separating two areas
	CONTENT_NODROP				= BIT(18)	// Don't leave bodies or items
} contentFlags_t;